import cv2

# 计算距离
def get_pos(imageSrc):
    # 读取图像返回一个image数组表示图像的对象
    image = cv2.imread(imageSrc)

    # 高斯卷积
    blurred = cv2.GaussianBlur(image, (5, 5), 0, 0)

    # 边缘检测
    # threshold1:第一个调值，用于边缘链接。一般设置为较小的值。
    # threshold2:第二个阔值，用于边缘链接和强边缘的缩选。一般设置为较大的值
    canny = cv2.Canny(blurred, 200, 400)
    print('*******经过了canny')

    # 轮廓检测
    # cv2.findContours()函数接受的参数为二值图，即黑白的（不是灰度图），所以读取的图像要先转成灰度的，再转成二值图，此处canny已经是二值图
    # contours：所有的轮廓像素坐标数组，hierarchy 轮廓之间的层次关系
    contours, hierarchy = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # print(contours, hierarchy)
    for i, contour in enumerate(contours):  # 对所有轮廓进行遍历
        M = cv2.moments(contour)  # 并计算每一个轮廓的力矩(Moment)，就可以得出物体的质心位置
        # print(M)
        if M['m00'] == 0:
            cx = cy = 0
        else:
            # 得到质心位置，打印这个轮廓的面积和周长，用于过滤
            cx, cy = M['m10'] / M['m00'], M['m01'] / M['m00']
            print(cv2.contourArea(contour), cv2.arcLength(contour, True))
        # 判断这个轮廓是否在这个面积和周长的范围内
        if 5000 < cv2.contourArea(contour) < 8000 and 300 < cv2.arcLength(contour, True) < 500:
            print(cx)
            if cx < 300:
                continue
            print(cv2.contourArea(contour))
            print(cv2.arcLength(contour, True))
            # 外接矩形，x，y是矩阵左上点的坐标，w，h是矩阵的宽和高
            x, y, w, h = cv2.boundingRect(contour)

            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 画出矩行
            # cv2.imshow('image', image)
            cv2.imwrite('111.jpg', image)  # 保存。注意自己更换保存位置
            return x
    return 0

